<?php
// 应用公共文件

/**
 * 函数：单图上传
 * @param string            表单名
 * @param int            宽度
 * @param int            高度
 * @param string            高度
 * @return string           显示图的URL
 * @return string           上传图的URL
 */
function upload_image(string $name="image",int $width=100,int $height=100,string $url=''){
	echo '<iframe scrolling="no" frameborder="0" border="0" onload="this.height=this.contentWindow.document.body.scrollHeight;this.width=this.contentWindow.document.body.scrollWidth;" width='.$width.' height="'.$height.'"  src="'.url('admin/upload/uploadpic',['name'=>$name,'width'=>$width,'height'=>$height,'url'=>base64_encode($url)]).'"></iframe><input type="hidden" name="'.$name.'" id="'.$name.'">';
}

/**
 * 函数：多图上传
 * @param string            表单名
 * @return string           显示图的URL
 * @return string           上传图的URL
 */
function upload_images(string $name="image",string $url=""){
    echo '<iframe scrolling="no" frameborder="0" border="0" width="100%" onload="this.height=this.contentWindow.document.body.scrollHeight;this.width=this.contentWindow.document.body.scrollWidth;" src="'.url('admin/upload/uploadpics',['name'=>$name,'url'=>base64_encode($url)]).'"></iframe><input type="hidden" name="'.$name.'" id="'.$name.'">';
}

/**
 * 函数：加密
 * @param string            密码
 * @return string           加密后的密码
 */
function password(string $password){
	/*
	*后续整强有力的加密函数
	*/
	return md5('~Chun!'.$password.'!Yan~');

}

/**
 * 随机字符
 * @param int $length 长度
 * @param string $type 类型
 * @param int $convert 转换大小写
 * @return string
 */
function random(int $length=6, string $type='string', int $convert=0){
    $config = array(
        'number'=>'1234567890',
        'letter'=>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'string'=>'abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789',
        'all'=>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    );

    if(!isset($config[$type])) $type = 'string';
    $string = $config[$type];

    $code = '';
    $strlen = strlen($string) -1;
    for($i = 0; $i < $length; $i++){
        $code .= $string[mt_rand(0, $strlen)];
    }
    if(!empty($convert)){
        $code = ($convert > 0)? strtoupper($code) : strtolower($code);
    }
    return $code;
}

/**
 * 函数：格式化字节大小
 * @param  int $size      字节数
 * @param  string $delimiter 数字和单位分隔符
 * @return string            格式化后的带单位的大小
 */
function format_bytes(int $size, string $delimiter = '') {
	$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
	for ($i = 0; $size >= 1024 && $i < 5; $i++) $size /= 1024;
	return round($size, 2) . $delimiter . $units[$i];
}

/**
 * 函数：性别获取
 * @param  int $sex      性别
 * @return string           返回性别
 */
function sex(int $sex=0) {
	if($sex==0){
		return '保密';
	}
	if($sex==1){
		return '男';
	}
	if($sex==2){
		return '女';
	}
}


/**
*
* 函数：日志记录
* @param  string $log   日志内容。
* @param  string $name （可选）用户名。
*
**/
function add_log(string $log, string|null $username=null)
{
    if ($username) {
        \think\facade\Db::name('log')->insert(['username'=>$username,'log'=>$log,'ip'=>$_SERVER["REMOTE_ADDR"],'t'=>time()]);
    }
}

/**
*
* 函数：树形结构
* @param  array $items   日志内容。
* @param  string $id 记录ID。
* @param  string $pid 记录父亲ID。
*
**/
function categorize_and_sort_hierarchy($items, string $id='id', string $pid='pid', string $son = 'children')
{
    $tree = array();
    $tmpMap = array();

    foreach ($items as $item) {
        $tmpMap[$item[$id]] = $item;
    }

    foreach ($items as $item) {
        if (isset($tmpMap[$item[$pid]])) {
            $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]];
        } else {
            $tree[] = &$tmpMap[$item[$id]];
        }
    }
    return $tree;
}


/**
 * 函数：成功跳转
 * @access protected
 * @param  int $code 错误代码
 * @param  string $msg 提示信息
 * @param  string $url 跳转的URL地址
 * @param  mixed $data 返回的数据
 * @param  integer $code 错误代码
 * @param  integer $wait 跳转等待时间
 * @param  array $header 发送的Header信息
 * @return void
 */
function success(string $msg = '', string $url = '',  string|array $data = '', int $wait = 3, array $header = [])
{
    if ($url=='') {
        $url = think\facade\Request::isAjax() ? '' : 'javascript:history.back(-1);';
    } else{
        $url = (strpos($url, '://') || 0 === strpos($url, '/')) ? $url : (string) url($url);
    }

    $result = [
        'msg' => $msg,
				'code'=>1,
        'data' => $data,
        'url' => $url,
        'wait' => $wait,
    ];

    if (think\facade\Request::isAjax()) {
        return think\Response::create($result,'json')->header($header);
    } else {
        return think\Response::create('/jump', 'view')->assign($result)->header($header);
    }

}

/**
 * 函数失败跳转
 * @access protected
 * @param  int $code 错误代码
 * @param  string $msg 提示信息
 * @param  string $url 跳转的URL地址
 * @param  mixed $data 返回的数据
 * @param  integer $code 错误代码
 * @param  integer $wait 跳转等待时间
 * @param  array $header 发送的Header信息
 * @return void
 */
function error(string $msg = '', string $url = '',  string|array $data = '', int $wait = 3, array $header = [])
{
    if ($url=='') {
        $url = think\facade\Request::isAjax() ? '' : 'javascript:history.back(-1);';
    } else{
        $url = (strpos($url, '://') || 0 === strpos($url, '/')) ? $url : (string) url($url);
    }

    $result = [
        'msg' => $msg,
				'code'=>0,
        'data' => $data,
        'url' => $url,
        'wait' => $wait,
    ];

    if (think\facade\Request::isAjax()) {
        return think\Response::create($result,'json')->header($header);
    } else {
        return think\Response::create('/jump', 'view')->assign($result)->header($header);
    }

}
